#include <iostream>  
#include <stack>  
using namespace std;  
  
const int MAX_SIZE = 100;  
  
int n;  
int col[MAX_SIZE]; // 列标号  
int row[MAX_SIZE]; // 行标号  
int queens[MAX_SIZE]; // 存储每行放置皇后的列号  
stack<int> stk; // 用于回溯的栈  
  
void place_queens(int row_num) {  
    if (row_num == n) { // 如果已经放置了n个皇后，则输出结果并返回  
        for (int i = 0; i < n; i++) {  
            cout << "Q ";  
        }  
        cout << endl;  
        return;  
    }  
    for (int i = 0; i < n; i++) { // 枚举每一列，判断是否可以放置皇后  
        bool conflict = false; // 标记是否发生了冲突  
        for (int j = 0; j < row_num; j++) { // 检查当前列是否与前面的皇后冲突  
            if (queens[j] == i || abs(col[j] - i) == abs(j - row_num)) {  
                conflict = true;  
                break;  
            }  
        }  
        if (!conflict) { // 如果当前列可以放置皇后，则放置皇后并递归处理下一行  
            queens[row_num] = i;  
            col[row_num] = i; // 将当前皇后的列号存储到列标号数组中  
            stk.push(i); // 将当前皇后的列号入栈，用于回溯  
            place_queens(row_num + 1); // 递归处理下一行  
            stk.pop(); // 回溯，将当前皇后的列号出栈  
        }  
    }  
}  
  
int main() {  
    cin >> n;  
    place_queens(0); // 从第0行开始放置皇后  
    return 0;  
}